package conexion
{
	import clases.Accidente;
	import clases.Capacitacion;
	import clases.HablaFacil;
	import clases.Mensaje;
	import clases.TACSA;
	import clases.Utils;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.utils.ObjectUtil;
	
	import valueObjects.Accidente;
	import valueObjects.HablaFacil;
	import valueObjects.Mensaje;
	import valueObjects.RolCapacitacion;
	import valueObjects.Tacsa;

	public final class Parser
	{
		private static var meses:Array = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
		
		public function Parser() { 
			
		} 
		
		public static function parserMensaje(objeto:valueObjects.Mensaje):clases.Mensaje {
			var objetoParser:clases.Mensaje = new clases.Mensaje();
			objetoParser.ciclico = objeto.ciclico;
			objetoParser.mensaje = objeto.mensaje;
			objetoParser.vecesRepetir = objeto.vecesRepetir;
			
			return objetoParser;
		}
		
		public static function parserHablaFacil(objeto:valueObjects.HablaFacil):clases.HablaFacil {
			var objetoParser:clases.HablaFacil = new clases.HablaFacil();
			objetoParser.levantadoRealizado = objeto.INTLEVANTADO;
			objetoParser.levantadoProgramado = objeto.INTLEVANTADOPROGRAMADO;
			objetoParser.pendienteRealizado = objeto.INTPENDIENTE;
			objetoParser.pendienteProgramado = objeto.INTPENDIENTEPROGRAMADO;
			objetoParser.reportadoRealizado = objeto.INTREPORTADO;
			objetoParser.reportadoProgramado = objeto.INTREPORTADOPROGRAMADO;
			
			objetoParser.levantadoCumplimiento = Utils.redondear(objetoParser.levantadoRealizado/objetoParser.levantadoProgramado, 2);
			objetoParser.pendienteCumplimiento = Utils.redondear(objetoParser.pendienteRealizado/objetoParser.pendienteRealizado, 2);
			objetoParser.reportadoCumplimiento = Utils.redondear(objetoParser.reportadoRealizado/objetoParser.reportadoProgramado, 2);
			
			objetoParser.fecha = objeto.Fecha.substr(0, 10);
			
			return objetoParser;
		}
		
		public static function parserTacsa(lista:ArrayCollection):clases.TACSA {
			var objetoParser:clases.TACSA = new clases.TACSA();
			var fechaTac:Date;
			if (lista.length == 3) {
				var obj1:Tacsa = lista.getItemAt(2) as Tacsa; 
				objetoParser.taca = obj1.taca;
				objetoParser.tacsa = obj1.tacsa;
				objetoParser.severidad = obj1.severidad;
				objetoParser.fecha1 = Utils.StringToFecha(obj1.Fecha);
				
				var obj2:Tacsa = lista.getItemAt(1) as Tacsa; 
				objetoParser.taca2 = obj2.taca;
				objetoParser.tacsa2 = obj2.tacsa;
				objetoParser.severidad2 = obj2.severidad;
				objetoParser.fecha2 = Utils.StringToFecha(obj2.Fecha);
				
				var obj3:Tacsa = lista.getItemAt(0) as Tacsa; 
				objetoParser.taca3 = obj3.taca;
				objetoParser.tacsa3 = obj3.tacsa;
				objetoParser.severidad3 = obj3.severidad;
				objetoParser.fecha3 = Utils.StringToFecha(obj3.Fecha);
				
				//Alert.show(ObjectUtil.toString(objeto));
			}
			return objetoParser;
		}
		
		public static function parserAccidente(objeto:valueObjects.Accidente):clases.Accidente {
			var objetoParser:clases.Accidente = new clases.Accidente();
			objetoParser.descripcion = objeto.VCHDESCRIPCION;
			objetoParser.fecha = objeto.Fecha.substr(0, 10);
		
			return objetoParser;
		}
		
		
		public static function parserCapacitacion(objeto:valueObjects.RolCapacitacion):clases.Capacitacion {
			var objetoParser:clases.Capacitacion = new clases.Capacitacion();
			objetoParser.descripcion = objeto.VCHTITULO + "\n\n " + objeto.VCHDESCRIPCION; 
			var dateFecha:Date = Utils.StringToFecha(objeto.Fecha);
			objetoParser.hora = objeto.Fecha.substr(0, 10) + " ";
			if (dateFecha.hours < 12) {
				if (dateFecha.hours == 0) {
					objetoParser.hora = objetoParser.hora  + "12:" + dateFecha.minutes.toString();
				} else {
					objetoParser.hora = objetoParser.hora  + dateFecha.hours.toString() + ":" + dateFecha.minutes.toString();
				}
				objetoParser.hora = objetoParser.hora + "a.m.";
			} else {
				if (dateFecha.hours == 12) {
					objetoParser.hora = objetoParser.hora  + "12:" + dateFecha.minutes.toString();
				} else {
					objetoParser.hora = objetoParser.hora  + String(dateFecha.hours - 12) + ":" + dateFecha.minutes.toString();
				}
				objetoParser.hora = objetoParser.hora + "p.m.";
			}
			//objetoParser.fecha = objeto.INTSEVERIDAD;
			
			return objetoParser;
		}
		
		public static function parserMensajes(lista:ArrayCollection):ArrayCollection {
			var listaParseados:ArrayCollection = new ArrayCollection();
			
			for each(var msj:valueObjects.Mensaje in lista) {
				listaParseados.addItem(parserMensaje(msj));
			}
			
			return listaParseados;
		}
		
		public static function parserAccidentes(lista:ArrayCollection):ArrayCollection {
			var listaParseados:ArrayCollection = new ArrayCollection();
			//Alert.show(ObjectUtil.toString(lista));
			for each(var obj:valueObjects.Accidente in lista) {
				listaParseados.addItem(parserAccidente(obj));
			}
			
			return listaParseados;
		}
		
		public static function parserCapacitaciones(lista:ArrayCollection):ArrayCollection {
			var listaParseados:ArrayCollection = new ArrayCollection();
			//Alert.show(ObjectUtil.toString(lista));
			for each(var obj:valueObjects.RolCapacitacion in lista) {
				listaParseados.addItem(parserCapacitacion(obj));
			}
			
			return listaParseados;
		}
		
		public static function parserReporteHablaFacil(lista:ArrayCollection):ArrayCollection {
			var listaReporte:ArrayCollection = new ArrayCollection();
			var acumulado:Object = new Object();
			
			var sumaReportado:Number = 0;
			var sumaLevantado:Number = 0;
			var sumaPendiente:Number = 0;
			var sumaProgramado:Number = 0;
			
			for each(var obj:valueObjects.HablaFacil in lista) {
				var item:clases.HablaFacil = parserHablaFacil(obj);
				var mes:Object = new Object();
				mes.reportado = item.reportadoRealizado;
				mes.levantado = item.levantadoRealizado;
				mes.pendiente = item.pendienteRealizado;
				mes.programado = item.reportadoProgramado;
					
				var fecha:Date = Utils.StringToFecha(obj.Fecha);
				
				mes.label = meses[fecha.month];
				
				sumaReportado = sumaReportado + mes.reportado;
				sumaLevantado = sumaLevantado + mes.levantado;
				sumaPendiente = sumaPendiente + mes.pendiente;
				sumaProgramado = sumaProgramado + mes.programado;
				
				listaReporte.addItem(mes);
			}
			
			acumulado.reportado = sumaReportado;
			acumulado.levantado = sumaLevantado;
			acumulado.pendiente = sumaPendiente;
			acumulado.programadoAnual = sumaProgramado;
			acumulado.label = "Acumulado";
			
			listaReporte.addItem(acumulado);
			
			return listaReporte;
		}
	}
}